/**
 * 
 */
package com.nari.heatshare.service;

import java.util.List;
import java.util.Map;

import com.nari.coreframe.service.IGenericService;
import com.nari.heatshare.model.IShareAreaResult;
import com.nari.heatshare.utils.AreaResultVerifyInfo;
import com.nari.platform.model.PageCond;
import com.nari.platform.model.ResponseMsg;
import com.nari.platform.model.ResultWithPageCond;
 
/**
 * 
 * @author Xiaopeng
 * @date 2013-8-19
 */
public interface IShareAreaResultService extends IGenericService<IShareAreaResult, String> {

	/**
	 * 分页查询分摊域分摊结果
	 * @param projectUID 所属项目(可选)
	 * @param communityUID 所属小区(可选)
	 * @param shareAreaUID 所属分摊域(可选)
	 * @param shareName 分摊名称(可选)
	 * @param pageCond
	 * @return
	 * @throws Exception
	 * @author Xiaopeng
	 * @date 2013-9-4
	 */
	public ResultWithPageCond<IShareAreaResult> queryAreaResultPage(String projectUID, 
			String communityUID, String shareAreaUID, String shareName, 
			PageCond pageCond) throws Exception;

	/**
	 * 通过所属关系（所属项目、所属小区、所属分摊域）查询分摊域分摊结果列表
	 * @param projectUID 所属项目(可选)
	 * @param communityUID 所属小区(可选)
	 * @param shareAreaUID 所属分摊域(可选)
	 * @return 若所属关系（所属项目、所属小区、所属分摊域）均不存在，则返回空列表
	 * @throws Exception
	 * @author Xiaopeng
	 * @date 2013-9-4
	 */
	public List<IShareAreaResult> queryAreaResultsByBelongs(String projectUID,
			String communityUID, String shareAreaUID) throws Exception;

	/**
	 * 通过分摊域分摊列表查询与之关联的行政机构ID-机构名称映射表
	 * @param areaResultList 分摊域分摊列表，若列表为空，则返回空的映射表
	 * @return
	 * @throws Exception
	 * @author Xiaopeng
	 * @date 2013-9-4
	 */
	public Map<String, String> queryReferCitysByAreaResultList(
			List<IShareAreaResult> areaResultList) throws Exception;

	/**
	 * 通过分摊域分摊列表查询与之关联的小区ID-小区名称映射表
	 * @param areaResultList 分摊域分摊列表，若列表为空，则返回空的映射表
	 * @return
	 * @throws Exception
	 * @author Xiaopeng
	 * @date 2013-9-4
	 */
	public Map<String, String> queryReferCommunitysByAreaResultList(
			List<IShareAreaResult> areaResultList) throws Exception;

	/**
	 * 通过分摊域分摊列表查询与之关联的分摊域ID-分摊域名称映射表
	 * @param areaResultList 分摊域分摊列表，若列表为空，则返回空的映射表
	 * @return
	 * @throws Exception
	 * @author Xiaopeng
	 * @date 2013-9-4
	 */
	public Map<String, String> queryReferShareAreasByAreaResultList(
			List<IShareAreaResult> areaResultList) throws Exception;

	/**
	 * 新增或修改分摊域分摊信息
	 * @param shareAreaResult
	 * @return
	 * @throws Exception
	 * @author Xiaopeng
	 * @date 2013-9-6
	 */
	public ResponseMsg saveOrUpdateAreaResult(IShareAreaResult shareAreaResult) throws Exception;

	/**
	 * 根据分摊域分摊唯一标识进行分摊计算
	 * @param areaResultUID
	 * @return
	 * @throws Exception
	 * @author Xiaopeng
	 * @date 2013-9-6
	 */
	public ResponseMsg saveAreaResultCalculation(String areaResultUID) throws Exception;

	/**
	 * 校验分摊域分摊的分摊条件
	 * @param areaResultUID
	 * @return
	 * @throws Exception
	 * @author Xiaopeng
	 * @date 2013-9-22
	 */
	public AreaResultVerifyInfo checkCalcAreaResultCondition(String areaResultUID) throws Exception;
	
	/**
	 * 通过分摊域分摊ID删除分摊信息，并级联删除从属于此分摊域分摊的用户分摊，
	 * 以及用户散热器分摊结果
	 * @param areaResultUID
	 * @throws Exception
	 * @author Xiaopeng
	 * @date 2013-10-8
	 */
	public ResponseMsg deleteAreaResultBatchByUID(String areaResultUID) throws Exception;

}
